import re

import pandas as pd
import glob

# 定义作者列表
authors_list = [
    "刘三女牙", "吴砥", "余新国", "陈增照", "陈靓影", "易宝林", "何秀玲", "杜旭", "张昭理", "黄涛", "吴龙凯", "陈矛",
    "王泰", "张维",
    "周东波", "孙建文", "廖盛斌", "朱晓亮", "钟正", "戴志诚", "舒江波", "吴珂", "刘乐元", "张坤", "方莹", "孙超",
    "何彬", "彭世新",
    "粟柱", "朱莎", "刘智", "赵亮", "刘海", "张浩", "李浩", "张立山", "曾致中", "陈敏", "李卿", "蔡畅", "石映辉",
    "张婷", "彭晛",
    "吴晨", "李亚婷", "李睿", "陈旭", "陈思菁", "梁如霞", "周子荷", "周驰", "汤胜兵", "万仟", "沈筱譞", "严中华",
    "徐建", "李洋洋",
    "尉小荣", "彭翕成", "张志", "任梦璐"
]


def merge_and_deduplicate_csv(directory, output_file):
    """
    读取指定目录下所有的CSV文件（假设没有表头），合并它们，并根据第二列去重。

    :param directory: 包含CSV文件的目录路径
    :param output_file: 输出文件的路径
    """
    # 使用glob模块找到所有的csv文件
    file_paths = glob.glob(directory + '/*.csv')

    # 读取每个文件，假设没有表头，所以header=None
    dataframes = [pd.read_csv(file, header=None) for file in file_paths]

    # 合并所有DataFrame
    all_data = pd.concat(dataframes, ignore_index=True)

    # 去重，假设第二列是索引为1的列
    unique_data = all_data.drop_duplicates(subset=1)

    # 删除第一列
    unique_data = unique_data.drop(unique_data.columns[0], axis=1)

    # 保存到新的CSV文件
    unique_data.to_csv(output_file, index=False, header=False)


def process_quoted_data(input_file, output_file):
    """
    读取文本文件，找到双引号内的内容，替换逗号为分号，去除双引号，并保存为新的文本文件。

    :param input_file: 输入文件路径
    :param output_file: 输出文件路径
    """
    # 读取整个文件内容
    with open(input_file, 'r', encoding='utf-8') as file:
        content = file.read()

    # 使用正则表达式找到所有双引号内的内容并进行替换
    def replace_commas(match):
        # 获取匹配的文本
        text = match.group(0)
        # 替换逗号为分号
        replaced_text = text.replace(',', ';')
        return replaced_text

    # 对所有双引号内的内容进行替换
    processed_content = re.sub(r'"([^"]*)"', replace_commas, content)

    # 保存处理后的内容到新文件
    with open(output_file, 'w', encoding='utf-8') as file:
        file.write(processed_content)


def filter_authors(input_file, output_file, authors_list):
    """
    从CSV文件中读取数据，保留列表中的作者，并保存到新的CSV文件中。

    :param input_file: 输入CSV文件路径
    :param output_file: 输出CSV文件路径
    :param authors_list: 保留的作者列表
    """
    # 创建作者集合
    authors_set = set(authors_list)

    # 读取CSV文件，假设没有表头，第二列是作者名
    data = pd.read_csv(input_file, header=None)

    # 处理每行，保留列表中的作者
    def keep_listed_authors(authors):
        # 分割作者名，并保留在列表中的作者
        return '; '.join([author for author in authors.split(';') if author.strip() in authors_set])

    # 应用函数到第二列（索引为1）
    data[1] = data[1].replace('"', '')
    data[1] = data[1].apply(keep_listed_authors)

    # 保存到新的CSV文件
    data.to_csv(output_file, index=False, header=False)


def process_authors(input_file):
    """
    读取CSV文件的第二列，处理作者名单，去重并排序。

    :param input_file: 输入CSV文件路径
    """
    # 读取CSV文件的第二列
    data = pd.read_csv(input_file, usecols=[1], header=None)

    # 获取第二列数据，将所有行合并成一个长字符串，用分号分隔
    authors_str = ';'.join(data[1].dropna())

    # 将字符串拆分成单独的作者名，并转换成集合去重
    authors_set = set(authors_str.split(';'))

    # 将去重后的作者名转换成列表并排序
    sorted_authors = sorted(authors_set)

    # 输出处理后的作者列表
    for author in sorted_authors:
        print(author)


def main():
    # 根据标题去重
    directory = 'result_CNKI/output'
    output_file = 'result_CNKI/001根据标题去重.txt'
    merge_and_deduplicate_csv(directory, output_file)
    # 作者列的整理
    input_file = 'result_CNKI/result/001根据标题去重_手动整理过刘三女牙等老师.txt'
    output_file = 'result_CNKI/result/002作者整理到一列，用分号隔开.csv'
    process_quoted_data(input_file, output_file)
    # 删除不是工程中心的老师
    input_file = 'result_CNKI/result/002作者整理到一列，用分号隔开.csv'
    output_file = 'result_CNKI/result/003删除了非工程中心的老师.csv'
    filter_authors(input_file, output_file, authors_list)
    pass


if __name__ == "__main__":
    main()
